#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
Kylin监控系统数据库初始化脚本
用于创建数据库和表结构，以及插入默认配置
"""

import os
import sys
import mysql.connector
from mysql_database import KylinDatabase, create_database_script
import yaml

def init_database():
    """初始化数据库"""
    print("=== Kylin监控系统数据库初始化 ===")

    # 获取数据库连接信息
    # 从config.yaml读取配置，如果需要可以覆盖默认值
    host = input("请输入MySQL主机地址 (直接回车使用config.yaml中的配置): ").strip() or None
    port_input = input("请输入MySQL端口 (直接回车使用config.yaml中的配置): ").strip() or None
    user = input("请输入MySQL用户名 (直接回车使用config.yaml中的配置): ").strip() or None
    password = input("请输入MySQL密码 (直接回车使用config.yaml中的配置): ").strip() or None
    database = input("请输入数据库名称 (直接回车使用config.yaml中的配置): ").strip() or None
    
    # 转换端口为整数，如果提供了的话
    port = int(port_input) if port_input is not None else None
        
    print(f"\n连接信息:")
    print(f"  主机: {host}")
    print(f"  端口: {port}")
    print(f"  用户: {user}")
    print(f"  数据库: {database}")

    # 创建数据库实例
    db = KylinDatabase(host=host, port=port, user=user, password=password, database=database)

    # 测试连接
    print("\n正在测试数据库连接...")
    if not db.connect():
        print(" 数据库连接失败！")
        print("请检查:")
        print("1. MySQL服务是否正在运行")
        print("2. 连接信息是否正确")
        print("3. 用户是否有足够权限")
        return False

    print("数据库连接成功！")

    # 创建数据库结构
    print("\n正在创建数据库结构...")
    if not db.create_database():
        print("创建数据库结构失败！")
        return False

    print("数据库结构创建成功！")

    # 获取数据库统计
    print("\n正在获取数据库统计信息...")
    stats = db.get_database_stats()

    print("数据库初始化完成！")
    print(f"\n数据库统计:")
    print(f"  训练数据表: {stats.get('training_data_count', 0)} 条记录")
    print(f"  模型表: {stats.get('models_count', 0)} 个模型")
    print(f"  活跃模型: {stats.get('active_models_count', 0)} 个")
    print(f"  检测结果表: {stats.get('detection_results_count', 0)} 条记录")
    print(f"  最近1小时检测: {stats.get('recent_detections_1h', 0)} 条记录")

    # 保存连接配置
    config = {
        'host': host,
        'port': port,  # 保存原始值，可能是None
        'user': user,
        'password': password,
        'database': database
    }

    # 保存到配置文件
    config_file = 'database_config.json'
    import json
    with open(config_file, 'w', encoding='utf-8') as f:
        json.dump(config, f, ensure_ascii=False, indent=2)

    print(f"\n数据库配置已保存到: {config_file}")
    print("\n现在你可以:")
    print("1. 运行 detector_model.py 开始收集训练数据")
    print("2. detector.py 开始系统监控")
    print("3. 所有数据将自动保存到MySQL数据库中")

    db.disconnect()
    return True


def test_database_connection():
    """测试数据库连接"""
    print("=== 测试数据库连接 ===")

    # 尝试加载配置文件
    config_file = 'database_config.json'
    if os.path.exists(config_file):
        import json
        with open(config_file, 'r', encoding='utf-8') as f:
            config = json.load(f)

        print(f"从配置文件加载连接信息: {config_file}")
        db = KylinDatabase(**config)

        if db.connect():
            print("数据库连接成功！")

            # 获取统计信息
            stats = db.get_database_stats()
            print(f"\n数据库统计:")
            print(f"  训练数据: {stats.get('training_data_count', 0)} 条")
            print(f"  模型: {stats.get('models_count', 0)} 个")
            print(f"  检测结果: {stats.get('detection_results_count', 0)} 条")

            db.disconnect()
            return True
        else:
            print("数据库连接失败！")
            return False
    else:
        print(f"配置文件不存在: {config_file}")
        print("请先运行数据库初始化")
        return False


def show_database_script():
    """显示数据库初始化SQL脚本"""
    print("=== 数据库初始化SQL脚本 ===")
    script = create_database_script()
    print(script)

    # 保存到文件
    script_file = 'init_database.sql'
    with open(script_file, 'w', encoding='utf-8') as f:
        f.write(script)

    print(f"\nSQL脚本已保存到: {script_file}")
    print("你可以手动在MySQL中执行这个脚本")


def main():
    """主函数"""
    if len(sys.argv) > 1:
        command = sys.argv[1]

        if command == 'init':
            init_database()
        elif command == 'test':
            test_database_connection()
        elif command == 'script':
            show_database_script()
        else:
            print("未知命令。可用命令:")
            print("  init   - 初始化数据库")
            print("  test   - 测试数据库连接")
            print("  script - 显示SQL脚本")
    else:
        print("Kylin监控系统数据库管理工具")
        print("\n可用命令:")
        print("  python init_database.py init   - 初始化数据库")
        print("  python init_database.py test   - 测试数据库连接")
        print("  python init_database.py script - 显示SQL脚本")
        print("\n或者直接运行此脚本进行交互式初始化")


if __name__ == "__main__":
    main()